package mysql8学习.高级.第16章_多版本并发控制;

/**
 * 4.4 MVCC整体操作流程
 * 了解了这些概念之后，我们来看下当查询一条记录的时候，系统如何通过MVCC找到它:
 *    1.首先获取事务自己的版本号，也就是事务ID;
 *    2.获取ReadView;
 *    3.查询得到的数据，然后与ReadView中的事务版本号进行比较;
 *    4.如果不符合ReadView规则，就需要从Undo Log中获取历史快照;
 *    5.最后返回符合规则的数据。
 *
 * 如果某个版本的数据对当前事务不可见的话，那就顺着版本链找到下一个版本的数据，
 * 继续按照上边的步骤判断可见性，依此类推，直到版本链中的最后-个版本。
 * 如果最后一个版本也不可见的话,那么就意味着该条记录对该事务完全不可见，查询结果就不包含该记录。
 *
 * 在隔离级别为读已提交(Read Commit)时，
 * @see mysql8学习.高级.第13章_事务的基本知识.C3_SQL的隔离级别
 * 一个事务中的每一次 SELECT查询都会重新获取一次 Read View。
 * 注意，此时同样的查询语句都会重新获取一次Read View,
 * 这时如果Read View不同，就可能产生不可重复读 或者幻读的情况。
 *
 * 当隔离级别为可重复读的时候，就避免了不可重复读,
 * 这是因为一个事务只在第一次SELECT的时候会获取一次Read View,
 * 而后面所有的SELECT都会复用这个Read View,
 *
 */
public class D4_MVCC整体操作流程 {
}
